package br.com.sig.cadastro.recursoshumanos.business.service;

import java.io.Serializable;

import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.inject.Named;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import br.com.sig.business.exception.BaseException;
import br.com.sig.cadastro.recursoshumanos.business.model.bo.ChefiaBO;
import br.com.sig.cadastro.recursoshumanos.business.model.bo.DepartamentoBO;
import br.com.sig.cadastro.recursoshumanos.business.model.entity.Chefia;
import br.com.sig.cadastro.recursoshumanos.business.model.enumeration.Departamento;
import br.com.sig.cadastro.recursoshumanos.business.model.enumeration.TipoDeChefia;
import br.com.sig.criteria.CriteriaVisitor;

@Named
@Stateless
public class DepartamentoService implements Serializable {
	
	private static final long serialVersionUID = 7745486195958713272L;
	
	@Inject
	private DepartamentoBO departamentoBO;
	
	@Inject
	private ChefiaBO chefiaBO;
	
	public Chefia getChefia(br.com.sig.cadastro.recursoshumanos.business.model.entity.Departamento departamento, TipoDeChefia tipoDeChefia) throws BaseException {
		Departamento dep = Departamento.get(departamento.getNome());
		return getChefia(dep, tipoDeChefia);
	}
	
	public Chefia getChefia(Departamento departamento, TipoDeChefia tipoDeChefia) throws BaseException {
		
		br.com.sig.cadastro.recursoshumanos.business.model.entity.Departamento dep = departamentoBO.get(departamento);
		
		Chefia chefia = new Chefia();
		chefia.setDepartamento(dep);
		chefia.setTipo(tipoDeChefia);
		
		return chefiaBO.findSingleResult(chefia, new CriteriaVisitor() {
			@Override
			public void visit(Criteria criteria) {
				criteria.add(Restrictions.isNull("dataDeTermino"));
			}
		});
		
	}	
	
	public Chefia getGerencia(Departamento departamento) throws BaseException {
		return getChefia(departamento, TipoDeChefia.GERENCIA);
	}
	
	public Chefia getDirecao(Departamento departamento) throws BaseException {
		return getChefia(departamento, TipoDeChefia.DIRECAO);
	}	
	
}